結構,就是去宣告我們所要生成的物件,他的名稱,以及它有哪些內容、功能。
例如三明治製作的範例中,他就火腿、麵包、三明治等結構體。
這邊進行宣告並不是他已經生成,而是一個雛形,就像模具一樣,我們先朔造了一個模具,未來我們這個物件時,只要告訴系統我要生成這個東西,系統便會按照模具給我們生成這個物件。
struct Ham has key { id:UID }
struct > 名稱 > has > 賦能 > {此結構的內容}
名稱 - 開頭皆為大寫,以作為區分。
賦能 - 為move的特點,每個結構可以賦予其功能,有key , store , drop , copy.
在運用上,依照此結構的用途來進行賦能,這些功能的用法之後有機會再來說明。
內容 - 在suimove的結構,開頭一定都是以 id:UID為主,如果沒有這個內容,就代表這個結構不是sui的物件,只有內容中有這個編碼的,才會被sui系統斷定為自己人。 id:UID的意思即是賦予每個參考這個結構體所生成的物件,都有一個hash ID,而雖然是同樣的模具製造,但每個物件都有自己獨特的ID,用於區分它們。
例如,我今天要製造一把劍,但每次製造的劍他的數值是隨機的,此時為了區分它們的不同,所以會給予ID,不過這只是其中一個原因,後續要去進行交易、改變、銷毀,都會運用到,當然他還有許多可能性,等待被發掘運用。
內容編碼部分,id : UID。
id 是內容的名稱 > :是用於定義此名稱屬於什麼類型 > UID 即是調用上面框架,表示它是這樣類型的物件。
例如,我做了一個Hero的結構
struct Hero has key, store {
id: UID, //id
hp: u64, //英雄血量
experience: u64, //角色經驗值
sword: Option<Sword>, //是否裝備劍
name: string::String, //英雄名稱
}
在之後函數調用此結構,進行生成時,會再將要生成的英雄數值,填入相對應的內容中,後面再繼續來說明。
常數與大部分語言相同,主要就是賦予某東西數值,而move中也會看到,將錯誤訊息寫在常數中,他對應得值,即是報錯時的代碼。
const HAM_PRICE: u64 = 10; //火腿價值10元
const EInsufficientFunds: u64 = 001; //錯誤代碼:告訴使用者,資金不足導致系統錯誤
const > 名稱 > :(定義類型) > 類型 > = > 數值。
名稱 - 多以大寫開頭,可以全大寫然後用_分隔單字,也可用大小寫穿插。依照個人習慣。
類型 - u8 , u16 , u64 , u128 ,目前sui中最常使用的就是u64。
先告一段落,後面慢慢進行~